package com.wande.dataplatform.domain.vo;

import lombok.Data;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 数据中台首页统计数据视图对象
 *
 * @author dataplatform
 */
@Data
public class DashboardStatsVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 数据源统计
     */
    private DataSourceStats dataSourceStats;

    /**
     * 项目统计
     */
    private ProjectStats projectStats;

    /**
     * 作业统计
     */
    private JobStats jobStats;

    /**
     * 数据资产统计
     */
    private AssetStats assetStats;

    /**
     * 数据质量统计
     */
    private QualityStats qualityStats;

    /**
     * 元数据统计
     */
    private MetadataStats metadataStats;

    /**
     * 数据服务统计
     */
    private ApiStats apiStats;

    /**
     * 存储统计
     */
    private StorageStats storageStats;

    /**
     * 数据源统计
     */
    @Data
    public static class DataSourceStats {
        /** 总数 */
        private Long total;
        /** 在线数量 */
        private Long online;
        /** 离线数量 */
        private Long offline;
        /** 各类型数量分布 */
        private Map<String, Long> typeDistribution;
    }

    /**
     * 项目统计
     */
    @Data
    public static class ProjectStats {
        /** 总数 */
        private Long total;
        /** 活跃项目数 */
        private Long active;
        /** 本月新增 */
        private Long monthlyNew;
    }

    /**
     * 作业统计
     */
    @Data
    public static class JobStats {
        /** 总数 */
        private Long total;
        /** 运行中 */
        private Long running;
        /** 成功 */
        private Long success;
        /** 失败 */
        private Long failed;
        /** 今日执行次数 */
        private Long todayExecutions;
    }

    /**
     * 数据资产统计
     */
    @Data
    public static class AssetStats {
        /** 总数 */
        private Long total;
        /** 各分类数量 */
        private Map<String, Long> categoryDistribution;
        /** 本周新增 */
        private Long weeklyNew;
    }

    /**
     * 数据质量统计
     */
    @Data
    public static class QualityStats {
        /** 质量规则总数 */
        private Long totalRules;
        /** 检查任务总数 */
        private Long totalTasks;
        /** 今日检查次数 */
        private Long todayChecks;
        /** 质量得分 */
        private Double qualityScore;
    }

    /**
     * 元数据统计
     */
    @Data
    public static class MetadataStats {
        /** 表总数 */
        private Long totalTables;
        /** 字段总数 */
        private Long totalColumns;
        /** 数据库数量 */
        private Long totalDatabases;
        /** 本周更新数量 */
        private Long weeklyUpdated;
    }

    /**
     * 数据服务统计
     */
    @Data
    public static class ApiStats {
        /** API总数 */
        private Long total;
        /** 启用数量 */
        private Long enabled;
        /** 今日调用次数 */
        private Long todayCalls;
        /** 平均响应时间(ms) */
        private Double avgResponseTime;
    }

    /**
     * 存储统计
     */
    @Data
    public static class StorageStats {
        /** 总存储大小(GB) */
        private Double totalSize;
        /** 表数量 */
        private Long tableCount;
        /** 总行数 */
        private Long totalRows;
        /** 数据库分布 */
        private List<DatabaseStorage> databaseDistribution;
    }

    /**
     * 数据库存储分布
     */
    @Data
    public static class DatabaseStorage {
        /** 数据库名称 */
        private String databaseName;
        /** 表数量 */
        private Long tableCount;
        /** 存储大小(GB) */
        private Double storageSize;
    }
}